Аннотация
Принятие и отклонение сетевых подключений к системным службам с помощью правил firewalld
Управление использованием сетевыми службами определенных сетевых портов с помощью меток портов SELinux
Управление серверными брандмауэрами (и упражнение)
Управление метками портов SELinux (и упражнение)
Управление серверными брандмауэрами
После завершения этого раздела вы сможете принимать и отклонять сетевые подключения к системным службам, используя правила firewalld.
Ядро Linux содержит netfilter ― платформу для операций с сетевым трафиком, таким как фильтрация пакетов, преобразование сетевых адресов и преобразование портов. Netfilter внедряет в ядро обработчики, которые перехватывают вызовы функций и сообщения, позволяя другим модулям ядра взаимодействовать напрямую с сетевым стеком ядра. Программное обеспечение брандмауэра использует эти обработчики для регистрации правил фильтрации и функций изменения пакетов, что позволяет обрабатывать каждый пакет, проходящий через сетевой стек. Любой входящий, исходящий или переадресуемый сетевой пакет может быть программно проверен, изменен, отброшен или маршрутизирован до того, как он достигнет компонентов или приложений в пространстве пользователя. Netfilter ― это основной компонент в брандмауэрах Red Hat Enterprise Linux 8.
netfilter
Netfilter
Nftables как усовершенствованная версия netfilter
Ядро Linux также содержит nftables ― новую подсистему фильтрации и классификации пакетов, в которой используется усовершенствованный код netfilter, но сохраняется архитектура netfilter, например обработчики сетевых стеков, система отслеживания подключений и функция ведения журналов. Преимущества nftables — это более быстрая обработка пакетов, более быстрое обновление наборов правил и одновременная обработка IPv4 и IPv6 на основе одних и тех же правил. Еще одно важное различие между nftables и netfilter ― их интерфейсы. Netfilter настраивается при помощи различных утилит, включая iptables, ip6tables, arptables и ebtables, которые устарели. Nftables использует лишь одну утилиту пространства пользователя ― nft, что позволяет осуществлять управление всеми протоколами через единый интерфейс и избежать конфликтов, связанных с большим разнообразием клиентских интерфейсов и разными интерфейсами netfilter.
nftables
iptables
ip6tables
arptables
ebtables
Введение в firewalld
Firewalld ― это диспетчер динамического брандмауэра, клиентский интерфейс для платформы nftables, использующий команду nft. До появления nftables подсистема firewalld использовала команду iptables для настройки netfilter напрямую (что является улучшенной альтернативой службе iptables). В RHEL 8 firewalld остается рекомендуемым клиентским интерфейсом, который управляет наборами правил брандмауэра с помощью nft. Firewalld может читать файлы конфигурации и наборы правил iptables и управлять ими, используя xtables-nft-multi для преобразования объектов iptables напрямую в правила и объекты nftables. Подсистему firewalld можно настроить на использование серверной части iptables в сложных случаях, когда существующие наборы правил iptables не могут быть должным образом обработаны командой nft, но делать это не рекомендуется.
Firewalld
firewalld
xtables-nft-multi
Приложения отправляют запросы в подсистему через интерфейс D-Bus. Подсистема firewalld, доступная в RPM-пакете firewalld, не входит в минимальную установку, но входит в базовую установку. Firewalld упрощает управление брандмауэром, распределяя весь сетевой трафик по зонам. Трафик обрабатывается правилами брандмауэра для соответствующей зоны на основе таких критериев, как IP-адрес источника пакета и входящий сетевой интерфейс. Каждая зона имеет собственный список портов и служб, которые могут быть открыты или закрыты.
D-Bus
На ноутбуках и других устройствах, регулярно меняющих сети, можно использовать NetworkManager для автоматического выбора зоны брандмауэра для подключения. Зоны настраиваются с помощью правил, подходящих для конкретных подключений.
Это особенно полезно при перемещении между домашней, рабочей и общедоступной беспроводной сетью. Пользователю может потребоваться, чтобы служба sshd системы была доступна при подключении к домашней и корпоративной сети, но не при подключении к общедоступной беспроводной сети в местном кафе.
sshd
Firewalld проверяет адрес источника каждого пакета, поступающего в систему. Если этот адрес источника связан с определенной зоной, будут применяться правила для этой зоны. Если адрес источника не входит ни в какую зону, firewalld связывает пакет с зоной для входящего сетевого интерфейса и применяет правила для этой зоны. Если сетевой интерфейс по какой-либо причине не связан с зоной, firewalld связывает пакет с зоной по умолчанию.
Зона по умолчанию ― это не отдельная зона, а назначение в существующую зону. Изначально firewalld назначает public в качестве зоны по умолчанию и сопоставляет кольцевой (loopback) интерфейс lo с зоной trusted.
public
lo
trusted
Большинство зон пропускают через брандмауэр трафик, соответствующий списку определенных портов и протоколов, например 631/udp, или стандартных служб, например ssh. Трафик, который не соответствует разрешенному порту/протоколу или службе, как правило, отклоняется. (Зона trusted, пропускающая весь трафик по умолчанию, — единственное исключение из этого правила.)
631/udp
ssh
Стандартные зоны
В firewalld есть стандартные зоны, которые можно настраивать. По умолчанию все зоны пропускают любой входящий трафик, являющийся частью соединения, запущенного системой, и весь исходящий трафик. В следующей таблице описывается исходная конфигурация зон.
Таблица 11.1. Конфигурация зон firewalld по умолчанию
home
mdns
ipp-client
samba-client
dhcpv6-client
internal
work
external
dmz
block
drop
Список доступных стандартных зон и описание их предполагаемого использования см. на man-странице firewalld.zones(5).
Стандартные службы
В подсистеме firewalld есть ряд стандартных служб. Эти определения служб помогают идентифицировать сетевые службы, которые необходимо настроить. Например, вместо того чтобы исследовать порты для службы samba-client, можно указать стандартную службу samba-client для настройки правильных портов и протоколов. В следующей таблице приведены стандартные службы, используемые в начальной конфигурации зон брандмауэра.
Таблица 11.2. Стандартные службы firewalld
Многие стандартные службы включены в пакет firewalld. Используйте команду firewall-cmd --get-services, чтобы отобразить список этих служб. Файлы конфигурации для стандартных служб находятся в каталоге /usr/lib/firewalld/services в формате, определенном на man-странице firewalld.zone(5).
/usr/lib/firewalld/services
Используйте стандартные службы или напрямую укажите нужные порт и протокол. Для просмотра стандартных служб и определения дополнительных служб можно использовать графический интерфейс веб-консоли.
Системные администраторы могут работать с firewalld тремя способами:
редактирование файлов конфигурации в /etc/firewalld/ напрямую (этот способ не рассматривается в данной главе);
/etc/firewalld/
графический интерфейс веб-консоли;
утилита командной строки firewall-cmd.
Настройка служб брандмауэра с помощью веб-консоли
Чтобы настроить службы брандмауэра с помощью веб-консоли, необходимо войти в систему с привилегированным доступом, установив флажок Reuse my password for privileged tasks. Таким образом, можно будет выполнять команды с правами sudo для изменения служб брандмауэра.
Нажмите Networking в меню навигации слева, чтобы отобразить раздел Firewall на главной странице Networking. Щелкните ссылку Firewall, чтобы открыть список разрешенных служб (Allowed Services).
В списке разрешенных служб указаны службы, которые в данный момент разрешены брандмауэром. Нажмите стрелку (>) слева от названия службы, чтобы просмотреть сведения о службе. Чтобы добавить службу, нажмите кнопку Add Services... в правом верхнем углу страницы Firewall Allowed Services.
На странице Add Services показаны доступные стандартные службы.
Чтобы выбрать службу, найдите ее в списке или введите в текстовом поле Filter Services. В следующем примере в текстовое поле поиска вводится строка http для поиска служб, содержащих эту строку (то есть, веб-служб). Установите флажок слева от служб, которым необходимо предоставить доступ через брандмауэр. Нажмите кнопку Add Services, чтобы завершить процесс.
http
Снова откроется страница Firewall Allowed Services, где можно просмотреть обновленный список разрешенных служб.
Настройка брандмауэра из командной строки
Команда firewall-cmd взаимодействует с диспетчером динамического брандмауэра firewalld. Он устанавливается как часть основного пакета firewalld и доступен для администраторов, предпочитающих работать с командной строкой, для работы в системах без графической среды, а также для создания сценариев настройки брандмауэра.
В таблице ниже указаны наиболее часто используемые команды firewall-cmd с пояснениями. Почти все команды будут работать с конфигурацией среды выполнения (runtime), если не указана опция --permanent. Если опция --permanent указана, необходимо активировать настройку, выполнив команду firewall-cmd --reload, которая считывает текущую постоянную (permanent) конфигурацию и применяет ее в качестве новой конфигурации среды выполнения. Многие из указанных команд принимают опцию --zone=ZONE, которая определяет, на какую зону они влияют. Если требуется маска сети, используйте нотацию CIDR, например 192.168.1/24.
--permanent
--zone=ZONE
ZONE
Запросить текущую зону по умолчанию.
Задать зону по умолчанию. Будут изменены и конфигурация среды выполнения, и постоянная конфигурация.
Отобразить список всех доступных зон.
Отобразить список всех зон, используемых в данный момент (имеющих связанный с ними интерфейс или источник), с информацией об интерфейсах и источниках.
CIDR
Направить весь трафик, поступающий с IP-адреса или из сети/маски сети, в указанную зону. Если опция --zone= не указана, будет использоваться зона по умолчанию.
--zone=
Удалить правило, направляющее весь трафик, поступающий с IP-адреса или из сети/маски сети, из указанной зоны. Если опция --zone= не указана, будет использоваться зона по умолчанию.
INTERFACE
Направить весь трафик, поступающий из INTERFACE, в указанную зону. Если опция --zone= не указана, будет использоваться зона по умолчанию.
Отобразить список всех настроенных интерфейсов, источников, служб и портов для ZONE. Если опция --zone= не указана, будет использоваться зона по умолчанию.
Получить всю информацию по всем зонам (интерфейсы, источники, порты, службы).
SERVICE
Пропустить трафик к SERVICE. Если опция --zone= не указана, будет использоваться зона по умолчанию.
PORT/PROTOCOL
Пропустить трафик к портам PORT/PROTOCOL. Если опция --zone= не указана, будет использоваться зона по умолчанию.
Удалить SERVICE из разрешенного списка для зоны. Если опция --zone= не указана, будет использоваться зона по умолчанию.
Удалить порты PORT/PROTOCOL из разрешенного списка для зоны. Если опция --zone= не указана, будет использоваться зона по умолчанию.
Сбросить конфигурацию среды выполнения и применить постоянную конфигурацию.
В приведенных ниже примерах команд назначается зона по умолчанию dmz, весь трафик, поступающий из сети 192.168.0.0/24, назначается зоне internal и открываются сетевые порты для службы mysql в зоне internal.
192.168.0.0/24
mysql
[root@host ~]# firewall-cmd --set-default-zone=dmz [root@host ~]# firewall-cmd --permanent --zone=internal \ --add-source=192.168.0.0/24 [root@host ~]# firewall-cmd --permanent --zone=internal --add-service=mysql [root@host ~]# firewall-cmd --reload
[root@host ~]#
firewall-cmd --set-default-zone=dmz
firewall-cmd --permanent --zone=internal \
--add-source=192.168.0.0/24
firewall-cmd --permanent --zone=internal --add-service=mysql
firewall-cmd --reload
Для ситуаций, где базового синтаксиса firewalld недостаточно, можно добавить элементы rich-rule (более информативный синтаксис) для создания более сложных правил. Если и синтаксиса rich-rule недостаточно, можно использовать правила прямой (direct) настройки — по сути, исходный синтаксис nft, смешанный с правилами firewalld.
Эти расширенные режимы не рассматриваются в данной главе.
Man-страницы firewall-cmd(1), firewalld(1), firewalld.zone(5), firewalld.zones(5) и nft(8)